﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using bolsatrabajo.Negocio;
using bolsatrabajo.Dominio.NHIBERNATE;
using System.Web.SessionState;

namespace bolsatrabajo.Controllers
{
   
    
    public class AvisoController : Controller
    {
        ServAviso ServAviso { get; set; }
        ServPostular ServPostular { get; set; }
        ServPostulante ServPostulante { get; set; }
        ServOfertante ServOfertante { get; set; }
        public ActionResult Index(String Correo)
        {
            Correo = Session["logincorreo"].ToString();
            
            ICollection<Aviso> Model = ServAviso.AvisosxOfertante(Correo);
            return View(Model);
        }
       
        public ActionResult SeleccionarPostulante(Int32 idpostulacion)
        {
            Postulacion postulacion = ServPostular.ConsultarPostulacion(idpostulacion);
            ServPostular.SeleccionarGanador(postulacion.Aviso.Id_Aviso, idpostulacion);
            return RedirectToAction("Index", "Aviso");
        }
        public ActionResult VerPostulaciones(Int32 idaviso)
        {
            
            ICollection<Postulacion> Model = ServPostular.PostulacionesxAviso(idaviso);
            return View(Model);
        }

        public ActionResult Details(Int32 idaviso)
        {
            Aviso Model = ServAviso.ConsultarAviso(idaviso);
            return View(Model);
        }
        public ActionResult DetalleParaPostulante(Int32 idaviso)
        {
            Aviso Model = ServAviso.ConsultarAviso(idaviso);
            return View(Model);
        }
        public ActionResult ListaAvisos()
        {
            ICollection<Aviso> Model = ServAviso.TodosLosAvisos();
            return View(Model);
        }

       
        public ActionResult Postular(Int32 IdAviso, String texto, FormCollection collection)
        {
            String Correo = Session["logincorreopostulante"].ToString();

            Postulante postulante = ServPostulante.ObtenerPostulante(Correo);

            if (postulante == null)
                throw new Exception("Postulante no registrado");
            Aviso aviso = ServAviso.ConsultarAviso(IdAviso);
            if (aviso == null)
                throw new Exception("Aviso no existe");
            Postulacion postulacionACrear = new Postulacion();
            postulacionACrear.Postulante = postulante;
            postulacionACrear.Aviso = aviso;
            postulacionACrear.FechaRegistro = DateTime.Now;
            postulacionACrear.DescripcionPostulante = texto;
            ServPostular.Postular(Correo, postulacionACrear);
            return RedirectToAction("ListaAvisos", "Aviso");
        }
        public ActionResult Create()
        {
            return View();
        }

        [HttpPost]
        public ActionResult Create(String Correo, FormCollection collection)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    Correo = Session["logincorreo"].ToString() ;
                    
                    Ofertante elofertante = ServOfertante.ObtenerOfertante(Correo);
                  
                    Aviso nuevoAviso = new Aviso();
                    nuevoAviso.Categoria = (String)collection["Categoria"];
                    nuevoAviso.DescripcionEmpresa = (String)collection["DescripcionEmpresa"];
                    nuevoAviso.DescripcionPuesto = (String)collection["DescripcionPuesto"];
                    nuevoAviso.FechaRegistro = DateTime.Parse((String)collection["FechaRegistro"]);
                    nuevoAviso.FechaVigencia = DateTime.Parse((String)collection["FechaVigencia"]);
                    nuevoAviso.Ofertante = elofertante;
                    nuevoAviso.Titulo = (String)collection["Titulo"];
                    //nuevoAviso.Id_Aviso = 2;
                    ServAviso.CrearAviso(Correo, nuevoAviso);
                    return RedirectToAction("Index");
                }
                return View();
            }
            catch (Exception e)
            {
                ModelState.AddModelError(String.Empty, "Error interno al intentar crear el postulante");
                return View();
            }
        }

        public ActionResult Edit(Int32 idaviso)
        {
            Aviso Model = ServAviso.ConsultarAviso(idaviso);
            return View(Model);
        }

        [HttpPost]
        public ActionResult Edit(Int32 idaviso, FormCollection collection)
        {
            try
            {
                if (ModelState.IsValid)
                {
                    String Correo = Session["logincorreo"].ToString();
                    Ofertante elofertante = ServOfertante.ObtenerOfertante(Correo);
                    Aviso avisobuscado = ServAviso.ConsultarAviso(idaviso);
                    if (avisobuscado == null)
                        throw new Exception("Aviso no encontrado");
                    if ((String)collection["Titulo"] == null)
                        throw new Exception("Titulo de Aviso vacio");
                    if ((String)collection["DescripcionEmpresa"] == null)
                        throw new Exception("Descripcion de Empresa vacio");
                    if ((String)collection["DescripcionPuesto"] == null)
                        throw new Exception("Descripcion de Puesto vacio");
                    if ((String)collection["Categoria"] == null)
                        throw new Exception("Categoria esta vacia");
                    if ((String)collection["FechaVigencia"] == null)
                        throw new Exception("Fecha de Vigencia no indicado");
                    Aviso avisoAModificar = new Aviso();
                    avisoAModificar.Categoria = (String)collection["Categoria"];
                    avisoAModificar.DescripcionEmpresa = (String)collection["DescripcionEmpresa"];
                    avisoAModificar.DescripcionPuesto = (String)collection["DescripcionPuesto"];
                    avisoAModificar.FechaRegistro = DateTime.Parse((String)collection["FechaRegistro"]);
                    avisoAModificar.FechaVigencia = DateTime.Parse((String)collection["FechaVigencia"]);
                    //nuevoAviso.Postulacion = (String)collection["Postulacion"];
                    avisoAModificar.Id_Aviso = idaviso;
                    avisoAModificar.Ofertante = elofertante;
                    avisoAModificar.Titulo = (String)collection["Titulo"];
                    ServAviso.ModificarAviso(avisoAModificar);
                    return RedirectToAction("Index");
                }
                return View();
            }
            catch
            {
                return View();
            }
        }

        public ActionResult Delete(Int32 idaviso)
        {
            Aviso Model = ServAviso.ConsultarAviso(idaviso);
            return View(Model);
        }

        //
        // POST: /Tutor/Delete/pcsihsai
        [HttpPost]
        public ActionResult Delete(Int32 idaviso, FormCollection collection)
        {
            try
            {
                if (idaviso == 0)
                    throw new Exception("Id de Aviso no valido");
                Aviso avisoAEliminar = ServAviso.ConsultarAviso(idaviso);
                if (avisoAEliminar == null)
                    throw new Exception("Aviso no encontrado");
                
                ServAviso.EliminarAviso(avisoAEliminar);
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }


    }
}